package GameStates;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.LinkedList;
import java.util.List;

import Schiffe.Phantom;
import Schiffe.Schiff;
import Spielfeld.Spielfeld;
import Spielfeld.SpielfeldGui;

public class PlatziereSchiffe implements MouseMotionListener,
										 MouseListener
{
	private Phantom phantom;
	private Spielfeld feld;
	private SpielfeldGui gui;
	private boolean fertig;
	private int schiffZaehler;
	
	private List<Schiff> schiffe;
	
	public PlatziereSchiffe (SpielfeldGui gui)
	{
		gui.addMouseMotionListener(this);
		gui.addMouseListener(this);
		
		fertig = false;
		feld = new Spielfeld (10, 10, 10, false);
		this.gui = gui;
		
		schiffe = new LinkedList<Schiff>();
		
		gui.neuesSpielfeld(feld);
		schiffZaehler = 0;
		phantom = new Phantom (0, 0, 5, true);
	}
	
	public boolean istFertig()
	{
		return fertig;
	}
	
	public List<Schiff> getSchiffe()
	{
		return schiffe;
	}
	
	public void mouseMoved(MouseEvent e)
	{
		for (Schiff s : schiffe)
		{
			s.setzeSchiffAufFeld(feld);
		}
		
		int x = feld.getXKoordinateAnPosition(e.getX());
		int y = feld.getYKoordinateAnPosition(e.getY());
		
		phantom.verschiebeSchiff(feld, x, y);
		gui.zeichne();
	}
	
	public void mouseClicked (MouseEvent e)
	{
		if(e.getButton() == MouseEvent.BUTTON2 && schiffZaehler < 5)
		{
			phantom.setzeHorizontal(!phantom.getHorizontal());
		}
		
		if (e.getButton() == MouseEvent.BUTTON1 && phantom.positionGueltig(feld) && schiffZaehler < 5)
		{
			Schiff schiff = new Schiff (phantom.getX(), phantom.getY(),
										 phantom.getGroesse(), phantom.getHorizontal());
			schiffe.add(schiff);
			schiffZaehler++;
			
			switch (schiffZaehler)
			{
			case 1:
				phantom = new Phantom (0, 0, 4, true);
				break;
			case 2:
				phantom = new Phantom (0, 0, 3, true);
				break;
			case 3:
				phantom = new Phantom (0, 0, 3, true);
				break;
			case 4:
				phantom = new Phantom (0, 0, 2, true);
				break;
			case 5:
				fertig = true;
				gui.removeMouseListener(this);
				gui.removeMouseMotionListener(this);
				break;
			default:
				fertig = true;
				gui.removeMouseListener(this);
				gui.removeMouseMotionListener(this);
				break;
			}
		}
	}
	
	public Spielfeld getSpielfeld ()
	{
		return feld;
	}
	
	public void mouseDragged (MouseEvent e) {}
	public void mouseEntered (MouseEvent e) {}
	public void mouseExited (MouseEvent e) {}
	public void mousePressed (MouseEvent e) {}
	public void mouseReleased (MouseEvent e) {}
}
